package com.zxn.kotlin.method

import com.zxn.kotlin.entity.UserEntity

//fun main() {
//    val result = UserEntity().apply {
//        this.userId = 100
//        this.userName = "华晨宇"
//        this.age = 30
//        println("my name is $userName, I am $age years old, my number is $userId")
//    }
//    println("result: $result")
//}

//fun main() {
//    "kotlin".let {
//        println("原字符串：$it")         // kotlin
//        it.reversed()
//    }.let {
//        println("反转字符串后的值：$it")     // niltok
//        it.plus("-java")
//    }.let {
//        println("新的字符串：$it")          // niltok-java
//    }
//}

//fun main() {
//    val result = "kotlin".also {
//        println("结果：${it.plus("-java")}")
//    }.also {
//        println("结果：${it.plus("-php")}")
//    }
//    println("result：$result")
//}

//fun main() {
//    val str = "kotlin"
//    str.run {
//        println("length = ${this.length}")
//        println("first = ${first()}")
//        println("last = ${last()}")
//    }
//}

//fun main() {
//    val result = UserEntity().run {
//        this.userId = 100
//        this.userName = "华晨宇"
//        this.age = 30
//        println("my name is $userName, I am $age years old, my number is $userId")
//        userName
//    }
//    println("result: $result")
//}

//fun main() {
//    val newStr = "kotlin"
//    val result = with(newStr){
//        println( "length = ${this.length}" )
//        println( "first = ${this.first()}")
//        println( "last = ${this.last()}" )
//        length
//    }
//    println("result: $result")
//}

//fun main() {
//    val str = "kotlin"
//    val result = str.takeIf {
//        //it.startsWith("ko")
//        it.startsWith("java")
//    }
//    println("result = $result")
//}

//fun main() {
//    val list = listOf(
//            UserEntity(100, "华晨宇", 30),
//            UserEntity(101, "张碧晨", 31),
//            UserEntity(103, "邓紫棋", 29),
//            UserEntity(103, "李宇春", 32)
//    )
//    for (entity in list) {
//        val result = entity.takeUnless {
//            it.age > 30
//        }
//        println("result = $result")
//    }
//}

//fun main() {
//    val list = listOf(
//            UserEntity(100, "华晨宇", 30),
//            UserEntity(101, "张碧晨", 31),
//            UserEntity(103, "邓紫棋", 29),
//            UserEntity(103, "李宇春", 32)
//    )
//    for (entity in list) {
//        if (entity.age < 30) {
//            repeat(3) {
//                println(entity)
//            }
//        }
//    }
//}

//fun main() {
//    val lazyValue: UserEntity by lazy {
//        println("lazy!")
//        UserEntity(100, "华晨宇", 30)
//    }
//    //第一次访问lazyValue，会打印"lazy!"和"华晨宇"
//    println(lazyValue)
//    //第二次访问只打印结果"华晨宇"
//    println(lazyValue)
//}

//fun main() {
//    val str = "kotlin"
//    run{
//        val str = "java"   // 和上面的变量不会冲突
//        println("str = $str")
//    }
//    println("str = $str")
//}

//private fun resultNumber(num1: Int, num2: Int, result: (Int, Int) -> Int): Int {
//    return result(num1, num2)
//}
//
//fun main() {
//    val result1 = resultNumber(1, 2) { num1, num2 ->
//        num1 + num2
//    }
//    println("result1 = $result1")
//    val result2 = resultNumber(1, 2) { num1, num2 ->
//        num1 * num2
//    }
//    println("result2 = $result2")
//    val result3 = resultNumber(1, 2) { num1, num2 ->
//        num1 % num2
//    }
//    println("result3 = $result3")
//}


////此方法用户判读用户是否为成年人.
//fun isAdult(): (UserEntity) -> Boolean {
//    return { entity -> entity.age >= 18 }
//}
//
//fun main() {
//    val user1 = UserEntity(100, "华晨宇", 30)
//    val user2 = UserEntity(101, "张碧晨", 31)
//    val user3 = UserEntity(103, "哇哈哈", 10)
//    val isAdultUser = isAdult()
//    println("${user1.userName}是 ${if (isAdultUser(user1)) "成年" else "儿童"}")
//    println("${user2.userName}是 ${if (isAdultUser(user2)) "成年" else "儿童"}")
//    println("${user3.userName}是 ${if (isAdult()(user3)) "成年" else "儿童"}")
//}
//

fun method1(targetBoolean: Boolean, targetMethod: (String) -> Unit) {
    if (targetBoolean) {
        targetMethod("成功")
    } else {
        targetMethod("失败")
    }
}

fun main() {
    val testTarget: (String) -> Unit = {
        println("target->$it")
    }
    method1(true, testTarget)
    method1(false, testTarget)
}